#include "dbpool.h"
#include <QDebug>
#include <QMutexLocker>

QList<QSqlDatabase> DBPool::databases;
QMutex DBPool::mutex;

DBPool::DBPool()
{

}

void DBPool::init(QString ip, int port, QString user, QString password, QString databaseName, int pool_size)
{
    // 锁定连接池
    QMutexLocker lock(&mutex);
    for (int i = 0; i < pool_size; ++i) {
        // 创建数据库连接
        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", QString("connect%1").arg(i));
        db.setHostName(ip);
        db.setPort(port);
        db.setUserName(user);
        db.setPassword(password);
        db.setDatabaseName(databaseName);
        if(!db.open()){
            qDebug() << "未成功链接到数据库";
            continue;
        }
        // 添加连接到连接池
        databases.push_back(db);
    }
}

void DBPool::unInit()
{
    // 关闭数据连接池
    QMutexLocker lock(&mutex);
    while (databases.size() > 0) {
        QSqlDatabase db = databases.front();
        db.close();
        databases.pop_front();
    }
}

bool DBPool::popDatabase(QSqlDatabase& db)
{
    // 获取连接池大锁
    QMutexLocker lock(&mutex);
    // 获取数据库连接
    if (databases.size() > 0) {
        db = databases.front();
        databases.pop_front();
        return true;
    }
    // 获取连接失败
    return false;
}

void DBPool::pushDatabase(QSqlDatabase& db)
{
    // 获取连接池大锁
    QMutexLocker lock(&mutex);
    databases.push_back(db);
}
